package com.javaee.demov2.web.api;


import com.javaee.demov2.persistent.entity.User;
import com.javaee.demov2.service.UserService;
import com.javaee.demov2.utils.bean.PageResult;

import com.javaee.demov2.utils.bean.SysConstants;
import com.javaee.demov2.utils.response.ResultVo;
import com.javaee.demov2.web.dto.user.UserAddDto;
import com.javaee.demov2.web.dto.user.UserQueryDto;
import com.javaee.demov2.web.dto.user.UserUpdateDto;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;

/**
 * 用户管理api接口类 使用Swagger
 */

// @Api：用于类上，表示该类是 Swagger 的资源，用于描述 API 资源的基本信息。
@Api(tags = "用户管理")
@Slf4j
@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    UserService userService;

    @Autowired
    HttpServletRequest request;

    /**
     * 根据用户id查询用户信息
     */
    // @ApiOperation：用于方法上，描述一个 HTTP 请求的操作。
    @ApiOperation(value = "获取用户", notes = "根据用户id获取用户对象")
    @GetMapping("/{id}")
    public ResultVo<User> getById(@PathVariable Long id) {
        User user = userService.getById(id);
        return ResultVo.ok(user);
    }


    /**
     * 新增用户
     */
    @ApiOperation(value = "新增用户", notes = "新增用户")
    @PostMapping("")
    public ResultVo add(@RequestBody UserAddDto userAddDto) {
        userAddDto.setLastLoginIp(request.getRemoteAddr());
        userService.add(userAddDto);
        return ResultVo.ok();
    }

    /**
     * 删除
     */
    @ApiOperation(value = "删除用户", notes = "根据用户id删除用户对象")
    @DeleteMapping("/{id}")
    public ResultVo delete(@PathVariable Long id) {
        return userService.removeById(id) ? ResultVo.ok() : ResultVo.fail();
    }

    /**
     * 更新
     */
    @ApiOperation(value = "更新用户", notes = "更新用户信息")
    @PutMapping("")
    public ResultVo update(@RequestBody UserUpdateDto userUpdateDto) {
        userService.update(userUpdateDto);
        return ResultVo.ok();
    }

    /**
     * 多条件查询,分页返回查询结果
     */
    @ApiOperation(value = "多条件查询", notes = "多条件查询用户对象")
    @PostMapping("query")
    public ResultVo<PageResult> pageQuery(@RequestBody UserQueryDto userQueryDto) {
        return ResultVo.ok(userService.query(userQueryDto));
    }

    /**
     * 判断是否存在相同的用户名接口
     */
    @ApiOperation(value = "是否存在相同的用户名", notes = "判断是否存在相同的用户名")
    @ApiResponses(value = {@ApiResponse(code = 200, message = "用户名存在返回ture,不存在返回false"),})

    @PostMapping("isExistUsername")
    public ResultVo isExistUsername(@RequestParam String username) {
        boolean res = userService.isExistUsername(username);
        return res ? ResultVo.ok(SysConstants.TRUE) : ResultVo.ok(SysConstants.FALSE);
    }

    @ApiOperation(value = "是否存在相同的Email地址", notes = "判断是否存在相同的Email地址")
    @ApiResponses(value = {@ApiResponse(code = 200, message = "Email地址存在返回ture,不存在返回false"),})
    @PostMapping("isExistEmail")
    public ResultVo isExistEmail(@RequestParam String email) {
        boolean res = userService.isExistEmail(email);
        return res ? ResultVo.ok(SysConstants.TRUE) : ResultVo.ok(SysConstants.FALSE);
    }


    @ApiOperation(value = "是否存在相同的手机号", notes = "判断是否存在相同的手机号")
    // @ApiResponse - 用于描述操作可能的响应
    // @ApiResponses - 容器存放多个 @ApiResponse 注解
    @ApiResponses(value = {@ApiResponse(code = 200, message = "手机号存在返回ture,不存在返回false"),})
    @PostMapping("isExistMobilePhoe")
    public ResultVo isExistMobilePhoe(@RequestParam String mobilePhone) {
        boolean res = userService.isExistMobilePhone(mobilePhone);
        return res ? ResultVo.ok(SysConstants.TRUE) : ResultVo.ok(SysConstants.FALSE);
    }

    // 导出excel文件
    // private void exportExcel(HttpServletResponse response) throws IOException {

    // }


    /**
     * 导入excel
     */
    // @PostMapping("import")
    // public ResultVo importExcel(MultipartFile file) throws IOException {

    // }
}
